package com.bill99.model;

import com.bill99.constant.ResponseStatus;

/**
 * 返回客户端信息数据封装的类
 * @author    HarryWang
 * @version   V1.00 2017年1月18日
 * @see       [相关类/方法]
 * @since     Weline V100R001
 */
@com.fasterxml.jackson.annotation.JsonIgnoreProperties()
public class RestResult
{
    /**0代表成功，其它代表失败*/
    private int code = 0;

    /**这是要返回前端的数据*/
    private Object content;

    /**这是要返回前端的信息*/
    private String msg = "success";

    /**这是要返回前端的状态*/
    private ResponseStatus status = ResponseStatus.SUCCESS;

    /**
     * 获取返回的标识
     * @return int
     * 如果有违例，请使用@exception/throws [违例类型]   [违例说明：异常的注释必须说明该异常的含义及什么条件下抛出该 
     * @see          [类、类#方法、类#成员]
     */
    public int getCode()
    {
        return code;
    }

    /**
     * 获取返回的数据
     * @return Object
     * 如果有违例，请使用@exception/throws [违例类型]   [违例说明：异常的注释必须说明该异常的含义及什么条件下抛出该 
     * @see          [类、类#方法、类#成员]
     */
    public Object getContent()
    {
        return content;
    }

    /**
     * 获取返回的信息
     * @return String
     * 如果有违例，请使用@exception/throws [违例类型]   [违例说明：异常的注释必须说明该异常的含义及什么条件下抛出该 
     * @see          [类、类#方法、类#成员]
     */
    public String getMsg()
    {
        return msg;
    }

    /**
     * 获取返回的状态
     * @return ResponseStatus
     * 如果有违例，请使用@exception/throws [违例类型]   [违例说明：异常的注释必须说明该异常的含义及什么条件下抛出该 
     * @see          [类、类#方法、类#成员]
     */
    public ResponseStatus getStatus()
    {
        return status;
    }

    /**
     * 设置返回的标识
     * @param code void
     * 如果有违例，请使用@exception/throws [违例类型]   [违例说明：异常的注释必须说明该异常的含义及什么条件下抛出该 
     * @see          [类、类#方法、类#成员]
     */
    public void setCode(int code)
    {
        this.code = code;
    }

    /**
     * 设置返回的内容
     * @param content void
     * 如果有违例，请使用@exception/throws [违例类型]   [违例说明：异常的注释必须说明该异常的含义及什么条件下抛出该 
     * @see          [类、类#方法、类#成员]
     */
    public void setContent(Object content)
    {
        this.content = content;
    }

    /**
     * 设置返回的信息
     * @param msg void
     * 如果有违例，请使用@exception/throws [违例类型]   [违例说明：异常的注释必须说明该异常的含义及什么条件下抛出该 
     * @see          [类、类#方法、类#成员]
     */
    public void setMsg(String msg)
    {
        this.msg = msg;
    }

    /**
     * 设置返回的状态
     * @param status void
     * 如果有违例，请使用@exception/throws [违例类型]   [违例说明：异常的注释必须说明该异常的含义及什么条件下抛出该 
     * @see          [类、类#方法、类#成员]
     */
    public void setStatus(ResponseStatus status)
    {
        this.status = status;
    }

    /**
     * 请求超时
     * 如果有违例，请使用@exception/throws [违例类型]   [违例说明：异常的注释必须说明该异常的含义及什么条件下抛出该 
     * @see          [类、类#方法、类#成员]
     */
    public void timeout()
    {
        this.status = ResponseStatus.TIMEOUT;
    }
    /**
     * 请求成功的方法
     * @param content
     * @return RestResult
     * 如果有违例，请使用@exception/throws [违例类型]   [违例说明：异常的注释必须说明该异常的含义及什么条件下抛出该 
     * @see          [类、类#方法、类#成员]
     */
    public static RestResult success(Object content)
    {
        RestResult result = new RestResult();
        result.setCode(0);
        result.setContent(content);
        result.setMsg("success");
        result.setStatus(ResponseStatus.SUCCESS);
        return result;
    }
    /**
     * 这是设置失败的信息
     * @param msg void
     * 如果有违例，请使用@exception/throws [违例类型]   [违例说明：异常的注释必须说明该异常的含义及什么条件下抛出该 
     * @see          [类、类#方法、类#成员]
     */
    public RestResult fail(String msg)
    {
        RestResult result = new RestResult();
        result.setCode(1);
        result.setMsg(msg);
        //设置失败的信息
        result.setStatus(ResponseStatus.FAIL);
        return result;
    }
    /**
     * 系统错误
     * @param msg void
     * 如果有违例，请使用@exception/throws [违例类型]   [违例说明：异常的注释必须说明该异常的含义及什么条件下抛出该 
     * @see          [类、类#方法、类#成员]
     */
    public RestResult error(String msg)
    {
        RestResult result = new RestResult();
        result.setCode(1);
        result.setMsg(msg);
        //系统错误
        result.setStatus(ResponseStatus.ERROR);
        return result;
    }

    /**
     * 转为JSON 
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString()
    {
        StringBuilder builder = new StringBuilder();
        builder.append("RestResult : {\"code\":\"").append(code)
            .append("\",\"content\":\"").append(content)
            .append("\",\"msg\":\"").append(msg).append("\",\"status\":\"")
            .append(status).append("\"}");
        return builder.toString();
    }
}
